Основные задачи | Tcs

Версия:

1.x

Основные задачи

Первичная установка системы

Установка TCS в производственном окружении производится с использованием инсталлятора Ansible Tarantool Enterprise (ATE).

Примечание

В тестовом окружении также возможна установка TCS без использования ATE.

Возможны 2 вида установки системы TCS с использованием ATE:

Пример кластера TCS, развернутого на нескольких серверах:

Пример развернутого кластера TCS

Настройка поддержки драйверов JDBC/ADBC

По умолчанию в TCS включена поддержка драйверов JDBC/ADBC. Для их корректной работы в конфигурации TCS для каждого экземпляра Storage нужно указать параметры соединения в разделе arrow_flight_sql (groups/storages/replicasets/replicaset<N>/instances/instance<N>/roles_cfg/tcs_roles/storage/arrow_flight_sql):

  • listen – номер порта. По умолчанию: 50051.

  • (обязательно) credentials – логин и пароль (параметры login и password).

  • session_timeout_secs – максимальная длительность сессии (в секундах). По умолчанию: 28800 (8 часов).

Примечание

Если экземпляры запущены на одном хосте, то для них нужно явно указать разные номера портов в параметре listen.

Пример:

groups:
  storages:
    replicasets:
      replicaset1:
        replication:
          failover: manual
        leader: instance1
        instances:
          instance1:
            roles_cfg:
              tcs_roles/storage:
                arrow_flight_sql:
                  listen: 10.95.196.62:50051
                  credentials:
                    username: tcs
                    password: tcs
                http:
                  enabled: true
                  listen: 10.95.196.62:7777
                  credentials:
                    username: tcs
                    password: tcs
                  session_timeout_secs: 28800
          instance2:
            roles_cfg:
              tcs_roles/storage:
                arrow_flight_sql:
                  listen: 10.95.196.26:50052
                  credentials:
                    username: tcs
                    password: tcs
                http:
                  enabled: true
                  listen: 10.95.196.26:7778
                  credentials:
                    username: tcs
                    password: tcs
                  session_timeout_secs: 28800

Для обоих экземпляров Storage в наборе реплик replicaset1 указаны:

  • параметр arrow_flight_sql_api;

  • разные номера портов в listen, поскольку экземпляры запущены на одном хосте.

Обновление версии системы

Внимание

Версия 1.0.2 несовместима с версией 1.0.1. Перед установкой версии 1.0.2 требуется очистить базу данных.

Чтобы обновить TCS 1.0.1 до версии 1.0.2, нужно выполнить следующие действия:

  1. Убедиться, что в файле инвентаря TCS соблюдается формула для значений параметров lease_interval > probe_interval + renew_interval. При необходимости изменений – загрузить обновленную конфигурацию в etcd.

  2. Остановить все экземпляры Storage 1.0.1 и полностью очистить среду (в ATE плейбук uninstall.yml).

  3. Развернуть все экземпляры Storage 1.0.2 (в ATE плейбук tcs-install.yml).

  4. С помощью SQL-запросов загрузить схему данных и сами данные.

Откат системы к предыдущей версии

Внимание

Версия 1.0.1 несовместима с версией 1.0.2. Перед установкой версии 1.0.1 требуется очистить базу данных.

Чтобы откатить TCS 1.0.2 обратно к версии 1.0.1, нужно выполнить следующие действия:

  1. Остановить все экземпляры Storage 1.0.2 и полностью очистить среду (в ATE плейбук uninstall.yml).

  2. Развернуть все экземпляры Storage 1.0.1 (в ATE плейбук tcs-install.yml).

  3. С помощью SQL-запросов загрузить схему данных и сами данные.

Создание резервной копии

Процедура создания резервной копии находится в проработке.

Восстановление из резервной копии

Процедура восстановления из резервной копии находится в проработке.

Масштабирование системы

Средства масштабирования в текущей версии TCS пока недоступны.

Управление кластером

Управление кластером с помощью ATE

Инсталлятор Ansible Tarantool Enterprise предоставляет следующие сценарии по управлению кластером (см. соответствующие разделы в документации по инсталлятору Ansible Tarantool Enterprise):

Управление кластером с помощью TCM

Tarantool Cluster Manager – это административная панель для настройки и отслеживания кластеров, а также управления ими. Основные задачи, доступные через веб-интерфейс TCM:

  • Создание/остановка кластера и изменение его конфигурации:

    • Переключение лидера в наборах реплик;

    • Изменение некоторых других настроек кластера, с простоем и в runtime;

    • Исключение экземпляра из кластера.

  • Управление пользователями и ролями в кластере:

    • Управление пользователями Tarantool;

    • Изменение паролей пользователей Tarantool Enterprise.

  • Контролируемое аварийное переключение узлов кластера;

  • Восстановление и пересоздание экземпляров;

  • Проверка работоспособности кластера;

  • Просмотр журналов аудита.

См. документацию по Tarantool Cluster Manager.

Удаление системы

См. раздел Удаление кластера Tarantool в документации по инсталлятору Ansible Tarantool Enterprise.

Изменение схемы данных

Схема данных задается с помощью команд SQL DDL.

Настройка подключения с шифрованием

TCS поддерживает подключение с шифрованием, где все входящие внешние запросы к сервисам осуществляются по HTTPS.

Примечание

Для внутрикластерных запросов (между экземплярами TCS и etcd) подключение с шифрованием не поддерживается.

Настройка подключения по HTTPS производится в конфигурационных файлах, в разделе groups/storages/replicasets/replicaset<N>/instances/instance<N>/roles_cfg/tcs_roles/storage/ каждого экземпляра:

  • transport — протокол приема входящих сообщений:

    • plain (по умолчанию) – входящие сообщения будут приниматься по HTTP.

    • tls – входящие сообщения будут приниматься по HTTPS. Если указано это значение, то обязательно должны быть указаны tls_cert_file и tls_key_file.

  • tls_cert_file — путь к TLS-сертификату в формате PEM.

  • tls_ca_file — путь к TLS-сертификату удостоверяющего центра в формате PEM (опционально, если не используется самоподписанный сертификат).

  • tls_key_file — путь к приватному ключу от сертификата.

  • tls_ciphers — список шифров для версий TLS до 1.2. Шифры разделяются символом :.

  • tls_ciphersuites — список шифров для TLS 1.3. Шифры разделяются символом :.

Если иные настройки не указаны, то по умолчанию используются рекомендации по настройке TLS на сервере Mozilla Intermediate v5.

TCS поддерживает работу с шифрами ГОСТ TLS. Для настройки работы с шифрами ГОСТ требуются следующие настройки:

  • указать шифры в tls_ciphers или tls_ciphersuites.

  • установить в систему криптографический модуль и подключить его в OpenSSL. Это нужно сделать как на сервере, так и у всех клиентов.

Примеры

Минимальная конфигурация с самоподписанным сертификатом

   tarantool_column_store.s1-1:
     advertise_uri: localhost:3301
     http_port: 8081
     memtx_memory: 2147483648 # 2gb
     log: ''
     roles_cfg:
       tcs_roles/storage:
         transport: tls
         tls_cert_file: certs/cert.pem
         tls_key_file: certs/key.pem

         features:
           - grpc_api

Конфигурация с сертификатом, выданным CA

   tarantool_column_store.s1-1:
     advertise_uri: localhost:3301
     http_port: 8081
     memtx_memory: 2147483648 # 2gb
     log: ''
     roles_cfg:
       tcs_roles/storage:
         transport: tls
         tls_cert_file: certs/cert.pem
         tls_ca_file: certs/ca.pem
         tls_key_file: certs/key.pem

         features:
           - grpc_api

Конфигурация с шифрами ГОСТ

   tarantool_column_store.s1-1:
     advertise_uri: localhost:3301
     http_port: 8081
     memtx_memory: 2147483648 # 2gb
     log: ''
     roles_cfg:
       tcs_roles/storage:
         transport: tls
         tls_cert_file: certs/cert.pem
         tls_key_file: certs/key.pem
         tls_ciphers: 'GOST2012-MAGMA-MAGMAOMAC:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC:LEGACY-GOST2012-GOST8912-GOST8912:IANA-GOST2012-GOST8912-GOST8912:GOST2001-GOST89-GOST89'
         tls_ciphersuites: ''

         features:
           - grpc_api

Привязка экземпляра Tarantool к NUMA-зоне

Чтобы привязать экземпляры Tarantool к узлам NUMA, нужно отредактировать конфигурационные файлы сервисов SystemD.

Полная инструкция

  1. Зайдите на сервер TCS с экземплярами Storage по SSH.

  2. Переключитесь на пользователя tarantool:

    sudo su tarantool
    
  3. Установите переменную окружения для работы с SystemD в userspace:

    export XDG_RUNTIME_DIR=/run/user/$(id -u)
    

    Объяснение: Это нужно для выполнения команд утилит SystemD (systemctl, journalctl) в userspace.

    Рекомендация: Чтобы не выполнять экспорт каждый раз, можно добавить команду export XDG_RUNTIME_DIR=/run/user/$(id -u) в файл $HOME/.profile.

  4. Посмотрите список сервисов пользователя tarantool:

    systemctl --user list-units --type=service
    

    Пример вывода:

    tarantool@tcs-testing-1:~$ systemctl --user list-units --type=service
      UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
      tarantool-cluster-manager.service  loaded active running Tarantool Cluster Manager
      tcs-scheduler@scheduler-01.service loaded active running Tarantool Column Store scheduler API service
    ● tcs@i-01.service                   loaded failed failed  Tarantool application tcs@i-01 #сервис инстанса стораджа
    

    В примере выше:

    • tcs@i-01.service – полное название сервиса для экземпляра с именем i-01;

    • tcs – название приложения Tarantool.

    В директории $HOME/.config/systemd/user находятся:

    • Шаблонный сервис для всех экзепляров tcs@.service;

    • Символическая ссылка на шаблонный сервис tcs@i-01.service.

  5. Откройте шаблонный сервис для экземпляров Storage:

    vim $HOME/.config/systemd/user/tcs@.service
    
  6. В шаблонном сервисе посмотрите путь до исполняемого файла tarantool:

    [Service]
    Type=simple
    ExecStart="/app/tarantool/tcs/bin/tcs.%i/tarantool --name %i" # запоминаем этот путь
    Restart=on-failure RestartSec=2
    

    Объяснение:

    При автоматическом развертывании TCS исполняемые файлы размещаются в разных местах в зависимости от:

    • указанных в настройках путей для размещения файлов;

    • названия приложения (app_name);

    • других параметров конфигурации.

    Вместо того чтобы пытаться угадать правильный путь к исполняемому файлу Tarantool при настройке службы (в параметре ExecStart), лучше сразу посмотреть точное расположение файла в конфигурационном файле службы vim ~/.config/systemd/user/tcs@.service.

  7. Выполните команду systemctl --user edit название_сервиса_storage для того, чтобы начать редактирование (во временном буфере) файла с перезаписью опций в шаблонном сервисе:

    systemctl --user edit tcs@i-01
    
  8. Добавьте перезапись опции ExecStart из секции [Service]. В новом ExecStart указан запуск процесса через утилиту numactl с нужными опциями:

    [Service]
    ExecStart=
    ExecStart=numactl --cpunodebind=0 --membind=0 /app/tarantool/tcs/bin/tcs.%i/tarantool --name %i
    

    ВАЖНО: обязательно нужно указать сначала пустой ExecStart, чтобы в дальнейшем не возникло ошибки при применении новой конфигурации.

  9. Сохраните файл.

    Объяснение: Это действие создаст директорию $HOME/.config/systemd/user/название_сервиса.d и файл override.conf в этой директории.

    Рекомендация: Чтобы в качестве редактора использовался vim (если он уже не используется по умолчанию), можно установить переменную окружения SYSTEMD_EDITOR=vim.

  10. Выполните команду для перезагрузки конфигурации systemD:

systemctl --user daemon-reload
  1. Перезапустите экземпляр:

systemctl --user restart tcs@i-01

Примечание: Перезапустить экземпляр можно также через ATE.

  1. После перезапуска можно проверить привязку к NUMA-зоне, найдя ее в файле /proc/${PID}/numa_maps.

Краткая инструкция

# Зайти под пользователем tarantool:
sudo su tarantool
# Установить переменную для работы с SystemD в userspace:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
# Посмотреть, какие есть сервисы:
systemctl --user list-units --type=service
# Запустить редактирование интересующего сервиса:
systemctl --user edit название_интересующего_сервиса
# Добавить в файл:
[Service]
ExecStart=
ExecStart=numactl --cpunodebind=0 --membind=0 /app/tarantool/tcs/bin/tcs.%i/tarantool --name %i
# Перезагрузить конфигурацию systemD:
systemctl --user daemon-reload
# Перезапустить экземпляр
systemctl --user restart название_сервиса

Установка системы в тестовой среде

Установка TCS в тестовой среде может производиться как с использованием инсталлятора Ansible Tarantool Enterprise (аналогично установке в производственной среде, так и вручную. Ниже приведены инструкции по ручной установке.

В пакет поставки TCS включены следующие файлы конфигурации:

  • Файл конфигурации config.yml описывает конфигурацию для кластера TCS (набор реплик из 2 экземпляров).

  • Файл конфигурации instances.yml указывает, какие именно экземпляры должны быть запущены на текущем хосте.

Возможны 2 вида установки кластера TCS:

Также кластер TCS можно разворачивать как на одном сервере (по умолчанию), так и на нескольких серверах.

Установка кластера с локальным файлом конфигурации

  1. Распаковать архив с поставкой версии TCS 1.0 и перейти в распакованную директорию.

  2. Убедиться, что в файле instances.yml указаны те экземпляры, которые нужно развернуть на текущем сервере.

  3. Запустить команду ./tt start, чтобы развернуть кластер.

  4. Запустить команду ./tt status для проверки того, что кластер поднят.

Пример результата успешной установки:

/tt start
• Starting an instance [tarantool_column_store: instance1]...
• Starting an instance [tarantool_column_store: instance2]...

/tt status
INSTANCE                           STATUS   PID     MODE  CONFIG  BOX      UPSTREAM
tarantool_column_store: instance1  RUNNING  319481  RW    ready   running  --
tarantool column store: instance2  RUNNING  319482  RO    ready   running  --

Установка кластера с файлом конфигурации в etcd

  1. Распаковать архив с поставкой версии TCS 1.0 и перейти в распакованную директорию.

  2. В файле config.yml прописать, откуда в etcd брать конфигурацию.

    Например:

    config:
      etcd:
        prefix: /tcs
        endpoints:
        - http://localhost:2379
        http:
          request:
            timeout: 1
    
  3. Загрузить файл конфигурации в etcd.

    Например:

    mv config.yml remote.yml
    ./tt cluster publish http://localhost:2379/tcs remote.yml
    
  4. Убедиться, что в файле instances.yml указаны те экземпляры, которые нужно развернуть на текущем сервере.

  5. Запустить команду ./tt start, чтобы развернуть кластер.

  6. Запустить команду ./tt status для проверки того, что кластер поднят.

Установка кластера на нескольких серверах

На каждом сервере нужно выполнить установку нужного типа (с локальным файлом конфигурации или хранящимся в etcd). При этом:

  • Файлы конфигурации TCS на серверах должны совпадать и содержать настройки для всех экземпляров TCS на всех серверах.

  • В файле instances.yml для каждого сервера нужно указать те экземпляры TCS, которые нужно развернуть на данном сервере.

Например:

  • instances.yml на сервере А:

    instance1:
    instance2:
    
  • instances.yml на сервере B:

    instance3:
    instance4:
    

Остановка кластера в тестовой среде

  1. Выполните команду ./tt stop -y для остановки кластера.

  2. (Необязательно) Выполните команду ./tt clean для зачистки журналов и данных.

Обновление системы в тестовой среде

  1. Остановить старый кластер, чтобы он не помешал поднять новую версию, если экземпляры старой и новой версии привязаны к одинаковым портам на одном сервере. Журналы и данные можно не очищать.

  2. Установить новую версию системы, не забыв обновить файл конфигурации.

Нашли ответ на свой вопрос?
Обратная связь